package com.proxy.demo1;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 * 实现自己的InvocationHandler
 * @author wdd-think
 *
 */
public class ProxyHandler implements InvocationHandler   
{   
  private Object proxied;   
     
  public ProxyHandler( Object proxied ){   
    this.proxied = proxied;   
  }   
  /** 
   * 执行目标对象的方法 
   */
  public Object invoke( Object proxy, Method method, Object[] args ) throws Throwable{   
    //在转调具体目标对象之前，可以执行一些功能处理
	System.out.println("before");
    //转调具体目标对象的方法
	Object obj =  method.invoke( proxied, args);  
	System.out.println("after");
	return obj;
    //在转调具体目标对象之后，可以执行一些功能处理
  }    
  
  /** 
   * 获取目标对象的代理对象 
   * @return 代理对象 
   */  
  public Object getProxy() {  
      return Proxy.newProxyInstance(Thread.currentThread().getContextClassLoader(), proxied.getClass().getInterfaces(),this);  
  }  
} 